package com.javaweb.web.service;

import java.util.List;
import java.util.Map;

import com.javaweb.base.po.User;
import com.javaweb.util.entity.Page;
import com.javaweb.web.eo.TokenData;
import com.javaweb.web.eo.role.ModuleInfoResponse;
import com.javaweb.web.eo.role.RoleIdAndStrategyRequest;
import com.javaweb.web.eo.user.RoleInfoResponse;
import com.javaweb.web.eo.user.UserAddRequest;
import com.javaweb.web.eo.user.UserListRequest;
import com.javaweb.web.eo.user.UserLoginRequest;
import com.javaweb.web.eo.user.UserModifyRequest;

/**
 * 用户模块业务层接口
 * 
 * @author tank2140896
 */
public interface UserService {
	
	/**
	 * 用户登录业务层接口
	 * 
	 * @param userLoginRequest 用户登录请求参数
	 * @return User 用户信息
	 */
	User userLogin(UserLoginRequest userLoginRequest);
	
	/**
	 * 用户列表业务层接口
	 * 
	 * @param userListRequest 用户列表请求参数
	 * @return Page 分页参数
	 */
	Page userList(UserListRequest userListRequest);
	
	/**
	 * 用户删除业务层接口
	 * 
	 * @param userId 用户ID
	 */
	void userDelete(String userId);

	/**
	 * 用户新增业务层接口
	 * 
	 * @param user 用户信息
	 */
	void userAdd(User user);

	/**
	 * 用户新增业务层接口
	 * 
	 * @param currentUser 当前登录的用户信息
	 * @param userAddRequest 用户新增请求参数
	 */
	void userAdd(User currentUser,UserAddRequest userAddRequest);

	/**
	 * 用户修改业务层接口
	 * 
	 * @param user 用户信息
	 */
	void userModify(User user);
	
	/**
	 * 用户修改业务层接口
	 * 
	 * @param currentUser 当前登录的用户信息
	 * @param userModifyRequest 用户修改请求参数
	 */
	void userModify(User currentUser,UserModifyRequest userModifyRequest);
	
	/**
	 * 用户详情业务层接口
	 * 
	 * @param userId 用户ID
	 * @return User 用户信息
	 */
	User userDetail(String userId);
	
	/**
	 * 根据用户ID获取用户信息业务层接口
	 * 
	 * @param list 用户ID列表
	 * @return List<User> 用户信息列表
	 */
	List<User> getUsersByUserId(List<String> list);
	
	/**
	 * 用户角色信息业务层接口
	 * 
	 * @param userId 用户ID
	 * @return List<RoleInfoResponse> 用户角色信息列表
	 */
	List<RoleInfoResponse> userRoleInfo(String userId);
	
	/**
	 * 用户角色分配业务层接口
	 * 
	 * @param userId 用户ID
	 * @param list 角色模块和数据权限列表
	 */
	void userRoleAssignment(String userId,List<RoleIdAndStrategyRequest> list);
	
	/**
	 * 用户模块信息业务层接口
	 * 
	 * @param map 用户模块信息请求参数
	 * @return List<ModuleInfoResponse> 用户模块信息列表
	 */
	List<ModuleInfoResponse> userModuleInfo(Map<String,String> map);
	
	/**
	 * 用户角色分配业务层接口
	 * 
	 * @param userId 用户ID
	 * @param list 用户模块信息列表
	 */
	void userModuleAssignment(String userId,List<String> list);
	
	/**
	 * 获取所有用户信息业务层接口
	 * 
	 * @return List<User> 用户信息列表
	 */
	List<User> getAllUsers();
	
	/**
	 * 初始化用户密码业务层接口
	 * 
	 * @param userId 用户ID
	 * @param tokenData tokenData
	 */
	void userInitPassword(String userId,TokenData tokenData);
	
	//void userPortraitUpload(String userId,MultipartFile multipartFile);

	//void userPortrait(String userId,HttpServletResponse httpServletResponse);
	
}
